package com.tianji.remark.service;

import com.tianji.remark.domain.dto.LikeRecordFormDTO;
import com.tianji.remark.domain.po.LikedRecord;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 点赞记录表 服务类
 * </p>
 *
 * @author zr
 * @since 2024-07-18
 */
public interface ILikedRecordService extends IService<LikedRecord> {

    /**
     * 添加点赞记录。
     * <p>
     * 该方法用于接收一个点赞记录的DTO对象，并将其添加到系统的点赞记录中。
     * 主要用于记录用户的点赞行为，以便后续的数据分析和用户行为追踪。
     *
     * @param recordDTO 点赞记录的DTO对象，包含了点赞的详细信息，如点赞用户ID、被点赞内容ID等。
     */
    void addLikeRecord(LikeRecordFormDTO recordDTO);

    /**
     * 判断指定业务ID是否被点赞。
     * <p>
     * 本函数通过查询点赞记录，确定给定的业务ID是否曾被点赞。点赞记录以集合形式返回，
     * 包含所有被点赞的业务ID。未被点赞的业务ID不会出现在返回的集合中。
     *
     * @param bizIds 业务ID的列表，代表需要查询点赞状态的业务项。
     * @return 返回一个集合，包含所有被点赞的业务ID。如果某个业务ID未被点赞，则不会出现在集合中。
     */
    Set<Long> isBizLiked(List<Long> bizIds);

    /**
     * 读取redis点赞次数并发送消息。
     * 此方法用于根据特定业务类型，读取点赞次数，并发送相关消息。
     * 主要应用于需要根据点赞数触发某些操作或通知的场景。
     *
     * @param bizType    业务类型标识。用于区分不同的业务场景。
     * @param maxBizSize redis取出业务数最大值。
     */
    void readLikedTimesAndSendMessage(String bizType, int maxBizSize);

}
